
/**
 * 静态方法，接收一个可迭代的promise对象。
 * 当所有的promise都fulfilled的时候，则返回一个fulfilled的promise，并且带有所有promise的result
 * 如果任一个promise被reject则返回一个reject的promise
 * 传入空的对象也是fulfilled
 * @param {*} promiseList 
 * @returns 
 */
function promiseAll(promiseList) {
    return new Promise((resolve, reject) => {
        if (!promiseList.length) {
            resolve([]);
            return;
        }
        const result = Array(promiseList.length);
        let count = 0;
        promiseList.forEach((promise, index) => {
            Promise.resolve(promise) // 防止普通值
            .then(res => {
                result[index] = res;
                count++;
                if (count === promise.length) {
                    resolve(result);
                }
            })
            .catch(reject);
        });
    });
}